package org.jsola.hr.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.jsola.core.dto.BaseDTO;

import java.util.Date;
import javax.validation.constraints.NotNull;

import static org.jsola.core.example.BaseExample.E_ID;
import static org.jsola.core.example.BaseExample.M_ID_NOT_NULL;
import static org.jsola.core.example.BaseExample.N_ID;
import static org.jsola.hr.example.OfferInfoExample.E_ATTACHMENT;
import static org.jsola.hr.example.OfferInfoExample.E_COMPANY;
import static org.jsola.hr.example.OfferInfoExample.E_COMPANY_ADDR;
import static org.jsola.hr.example.OfferInfoExample.E_COMPANY_ID;
import static org.jsola.hr.example.OfferInfoExample.E_DEP_ID;
import static org.jsola.hr.example.OfferInfoExample.E_EMAIL;
import static org.jsola.hr.example.OfferInfoExample.E_EMAIL_COPY;
import static org.jsola.hr.example.OfferInfoExample.E_EMAIL_SECRET;
import static org.jsola.hr.example.OfferInfoExample.E_EMPLOY_TYPE;
import static org.jsola.hr.example.OfferInfoExample.E_ENTRY_ADDR;
import static org.jsola.hr.example.OfferInfoExample.E_ENTRY_CONTACT;
import static org.jsola.hr.example.OfferInfoExample.E_ENTRY_DATE;
import static org.jsola.hr.example.OfferInfoExample.E_ENTRY_PHONE;
import static org.jsola.hr.example.OfferInfoExample.E_EXPIRY;
import static org.jsola.hr.example.OfferInfoExample.E_EXPIRY_DATE;
import static org.jsola.hr.example.OfferInfoExample.E_GENDER;
import static org.jsola.hr.example.OfferInfoExample.E_HRBP;
import static org.jsola.hr.example.OfferInfoExample.E_INFORMAL_TYPE;
import static org.jsola.hr.example.OfferInfoExample.E_MANAGER_FORM;
import static org.jsola.hr.example.OfferInfoExample.E_NAME;
import static org.jsola.hr.example.OfferInfoExample.E_PHONE;
import static org.jsola.hr.example.OfferInfoExample.E_POSITION_ID;
import static org.jsola.hr.example.OfferInfoExample.E_PROBATION;
import static org.jsola.hr.example.OfferInfoExample.E_RANK;
import static org.jsola.hr.example.OfferInfoExample.E_REGULAR_DATE;
import static org.jsola.hr.example.OfferInfoExample.E_SALARY_BASIC;
import static org.jsola.hr.example.OfferInfoExample.E_SALARY_MODE;
import static org.jsola.hr.example.OfferInfoExample.E_SALARY_REMARK;
import static org.jsola.hr.example.OfferInfoExample.E_STATUS;
import static org.jsola.hr.example.OfferInfoExample.E_SUPERVISOR;
import static org.jsola.hr.example.OfferInfoExample.E_WORK_CITY;
import static org.jsola.hr.example.OfferInfoExample.E_WORK_CITY_ID;
import static org.jsola.hr.example.OfferInfoExample.M_ATTACHMENT_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_COMPANY_ADDR_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_COMPANY_ID_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_COMPANY_ID_NOT_NULL;
import static org.jsola.hr.example.OfferInfoExample.M_COMPANY_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_DEP_ID_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_EMAIL_COPY_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_EMAIL_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_EMAIL_SECRET_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_ENTRY_ADDR_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_ENTRY_CONTACT_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_ENTRY_PHONE_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_HRBP_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_NAME_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_PHONE_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_POSITION_ID_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_RANK_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_SALARY_REMARK_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_SUPERVISOR_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_WORK_CITY_ID_MAX;
import static org.jsola.hr.example.OfferInfoExample.M_WORK_CITY_MAX;
import static org.jsola.hr.example.OfferInfoExample.N_ATTACHMENT;
import static org.jsola.hr.example.OfferInfoExample.N_COMPANY;
import static org.jsola.hr.example.OfferInfoExample.N_COMPANY_ADDR;
import static org.jsola.hr.example.OfferInfoExample.N_COMPANY_ID;
import static org.jsola.hr.example.OfferInfoExample.N_DEP_ID;
import static org.jsola.hr.example.OfferInfoExample.N_EMAIL;
import static org.jsola.hr.example.OfferInfoExample.N_EMAIL_COPY;
import static org.jsola.hr.example.OfferInfoExample.N_EMAIL_SECRET;
import static org.jsola.hr.example.OfferInfoExample.N_EMPLOY_TYPE;
import static org.jsola.hr.example.OfferInfoExample.N_ENTRY_ADDR;
import static org.jsola.hr.example.OfferInfoExample.N_ENTRY_CONTACT;
import static org.jsola.hr.example.OfferInfoExample.N_ENTRY_DATE;
import static org.jsola.hr.example.OfferInfoExample.N_ENTRY_PHONE;
import static org.jsola.hr.example.OfferInfoExample.N_EXPIRY;
import static org.jsola.hr.example.OfferInfoExample.N_EXPIRY_DATE;
import static org.jsola.hr.example.OfferInfoExample.N_GENDER;
import static org.jsola.hr.example.OfferInfoExample.N_HRBP;
import static org.jsola.hr.example.OfferInfoExample.N_INFORMAL_TYPE;
import static org.jsola.hr.example.OfferInfoExample.N_MANAGER_FORM;
import static org.jsola.hr.example.OfferInfoExample.N_NAME;
import static org.jsola.hr.example.OfferInfoExample.N_PHONE;
import static org.jsola.hr.example.OfferInfoExample.N_POSITION_ID;
import static org.jsola.hr.example.OfferInfoExample.N_PROBATION;
import static org.jsola.hr.example.OfferInfoExample.N_RANK;
import static org.jsola.hr.example.OfferInfoExample.N_REGULAR_DATE;
import static org.jsola.hr.example.OfferInfoExample.N_SALARY_BASIC;
import static org.jsola.hr.example.OfferInfoExample.N_SALARY_MODE;
import static org.jsola.hr.example.OfferInfoExample.N_SALARY_REMARK;
import static org.jsola.hr.example.OfferInfoExample.N_STATUS;
import static org.jsola.hr.example.OfferInfoExample.N_SUPERVISOR;
import static org.jsola.hr.example.OfferInfoExample.N_WORK_CITY;
import static org.jsola.hr.example.OfferInfoExample.N_WORK_CITY_ID;

/**
 * @author zhr
 */
@EqualsAndHashCode(callSuper = true)
@ApiModel(description = "修改【员工offer信息】的参数")
@Data
public class OfferInfoUpdateDTO extends BaseDTO {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(notes = N_ID, example = E_ID, required = true)
    @NotNull(message = M_ID_NOT_NULL)
    private String id;

    @ApiModelProperty(notes = N_NAME, example = E_NAME)
    @Length(max = 32, message = M_NAME_MAX)
    private String name;

    @ApiModelProperty(notes = N_GENDER, example = E_GENDER)
    private Integer gender;

    @ApiModelProperty(notes = N_PHONE, example = E_PHONE)
    @Length(max = 11, message = M_PHONE_MAX)
    private String phone;

    @ApiModelProperty(notes = N_EMAIL, example = E_EMAIL)
    @Length(max = 255, message = M_EMAIL_MAX)
    private String email;

    @ApiModelProperty(notes = N_EMAIL_COPY, example = E_EMAIL_COPY)
    @Length(max = 255, message = M_EMAIL_COPY_MAX)
    private String emailCopy;

    @ApiModelProperty(notes = N_EMAIL_SECRET, example = E_EMAIL_SECRET)
    @Length(max = 255, message = M_EMAIL_SECRET_MAX)
    private String emailSecret;

    @ApiModelProperty(notes = N_EXPIRY, example = E_EXPIRY)
    private Integer expiry;

    @ApiModelProperty(notes = N_EXPIRY_DATE, example = E_EXPIRY_DATE)
    private Date expiryDate;

    @ApiModelProperty(notes = N_ENTRY_DATE, example = E_ENTRY_DATE)
    private Date entryDate;

    @ApiModelProperty(notes = N_EMPLOY_TYPE, example = E_EMPLOY_TYPE)
    private Boolean employType;

    @ApiModelProperty(notes = N_INFORMAL_TYPE, example = E_INFORMAL_TYPE)
    private Integer informalType;

    @ApiModelProperty(notes = N_PROBATION, example = E_PROBATION)
    private Integer probation;

    @ApiModelProperty(notes = N_REGULAR_DATE, example = E_REGULAR_DATE)
    private Date regularDate;

    @ApiModelProperty(notes = N_DEP_ID, example = E_DEP_ID)
    @Length(max = 32, message = M_DEP_ID_MAX)
    private String depId;

    @ApiModelProperty(notes = N_POSITION_ID, example = E_POSITION_ID)
    @Length(max = 32, message = M_POSITION_ID_MAX)
    private String positionId;

    @ApiModelProperty(notes = N_COMPANY, example = E_COMPANY)
    @Length(max = 255, message = M_COMPANY_MAX)
    private String company;

    @ApiModelProperty(notes = N_RANK, example = E_RANK)
    @Length(max = 255, message = M_RANK_MAX)
    private String rank;

    @ApiModelProperty(notes = N_HRBP, example = E_HRBP)
    @Length(max = 255, message = M_HRBP_MAX)
    private String hrbp;

    @ApiModelProperty(notes = N_COMPANY_ID, example = E_COMPANY_ID, required = true)
    @NotNull(message = M_COMPANY_ID_NOT_NULL)
    @Length(max = 32, message = M_COMPANY_ID_MAX)
    private String companyId;

    @ApiModelProperty(notes = N_SUPERVISOR, example = E_SUPERVISOR)
    @Length(max = 255, message = M_SUPERVISOR_MAX)
    private String supervisor;

    @ApiModelProperty(notes = N_MANAGER_FORM, example = E_MANAGER_FORM)
    private Integer managerForm;

    @ApiModelProperty(notes = N_WORK_CITY_ID, example = E_WORK_CITY_ID)
    @Length(max = 32, message = M_WORK_CITY_ID_MAX)
    private String workCityId;

    @ApiModelProperty(notes = N_WORK_CITY, example = E_WORK_CITY)
    @Length(max = 255, message = M_WORK_CITY_MAX)
    private String workCity;

    @ApiModelProperty(notes = N_ENTRY_ADDR, example = E_ENTRY_ADDR)
    @Length(max = 255, message = M_ENTRY_ADDR_MAX)
    private String entryAddr;

    @ApiModelProperty(notes = N_ENTRY_CONTACT, example = E_ENTRY_CONTACT)
    @Length(max = 255, message = M_ENTRY_CONTACT_MAX)
    private String entryContact;

    @ApiModelProperty(notes = N_ENTRY_PHONE, example = E_ENTRY_PHONE)
    @Length(max = 255, message = M_ENTRY_PHONE_MAX)
    private String entryPhone;

    @ApiModelProperty(notes = N_COMPANY_ADDR, example = E_COMPANY_ADDR)
    @Length(max = 255, message = M_COMPANY_ADDR_MAX)
    private String companyAddr;

    @ApiModelProperty(notes = N_SALARY_MODE, example = E_SALARY_MODE)
    private Integer salaryMode;

    @ApiModelProperty(notes = N_SALARY_BASIC, example = E_SALARY_BASIC)
    private Integer salaryBasic;

    @ApiModelProperty(notes = N_SALARY_REMARK, example = E_SALARY_REMARK)
    @Length(max = 255, message = M_SALARY_REMARK_MAX)
    private String salaryRemark;

    @ApiModelProperty(notes = N_ATTACHMENT, example = E_ATTACHMENT)
    @Length(max = 32, message = M_ATTACHMENT_MAX)
    private String attachment;

    @ApiModelProperty(notes = N_STATUS, example = E_STATUS)
    private Integer status;


}

